﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace Guarouba.Pages
{
    public partial class _006_Vagas_Detalhes : PaginaBase
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Carrega DropDownList
                Classes.DDL ddl = new Classes.DDL();
                ddlFormacao = ddl.CarregaFormacoesAcademicas(ddlFormacao);

                if (Classes.Tools.PegarQueryString("ID") != null)
                {
                    //Carrega os detalhes da vaga na tela
                    CarregaDetalhesDaVaga();

                    MontarTela();
                    
                }

                if (Classes.Tools.PegarQueryString("PM") == "Insert")
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Vaga Inserida",
                            "Os dados da Vaga foram gravadas com sucesso.",
                            3);
                }                
            }            
        }

        private void MontarTela()
        {
            string idVaga = Classes.Tools.PegarQueryString("ID");

            BLL.Vagas vag = new BLL.Vagas();
            string status = vag.VerificarStatusDaVaga(
                Convert.ToInt32(idVaga));

            //Define status dos botões da tela
            switch (status)
            {
                case "Aberta":
                    btnSuspender.Visible = true;
                    btnFinalizar.Visible = true;
                    btnCancelar.Visible = true;
                    btnExcluir.Visible = true;
                    break;
                case "Finalizada":
                    btnSuspender.Visible = false;
                    btnFinalizar.Visible = false;
                    btSalvar.Visible = false;
                    btnCancelar.Visible = false;
                    btnExcluir.Visible = false;
                    break;
                case "Suspensa":
                    btnSuspender.Visible = false;
                    btnFinalizar.Visible = true;
                    btnCancelar.Visible = true;
                    btnExcluir.Visible = false;
                    break;
                case "Cancelada":
                    btnSuspender.Visible = false;
                    btnFinalizar.Visible = false;
                    btSalvar.Visible = false;
                    btnCancelar.Visible = false;
                    btnExcluir.Visible = false;
                    break;
            }                
        }

        private bool Validacoes()
        {
            StringBuilder sbErros = new StringBuilder(); ;

            if (txtTituloVaga.Text == string.Empty)
                sbErros.AppendLine("Informe o título da vaga (nome do cargo).<br />");

            if (txtNumeroVagas.Text == string.Empty)
                sbErros.AppendLine("Informe a quantidade de vagas disponíveis.<br />");
            else
            {
                int nVagasTmp;
                bool isNum = int.TryParse(txtNumeroVagas.Text, out nVagasTmp);
                if (!isNum)
                    sbErros.AppendLine("O número de vagas informado é inválido.<br />");
            }

            if (txtCidade.Text == string.Empty)
                sbErros.AppendLine("Informe o nome da cidade que esta com a vaga.<br />");

            if (txtEstado.Text == string.Empty)
                sbErros.AppendLine("Informe o nome do Estado que esta com a vaga.<br />");

            if (txtPais.Text == string.Empty)
                sbErros.AppendLine("Informe o País que esta com a vaga.<br />");

            if (txtDescricao.Text == string.Empty)
                sbErros.AppendLine("Informe a descrição completa da vaga.<br />");
            else
            {
                if (txtDescricao.Text.Length < 10)
                    sbErros.AppendLine("Não é possível inserir uma vaga com uma descrição curta.<br />");
            }

            if (ddlFormacao.SelectedValue == "0")
            {
                sbErros.AppendLine("Selecione uma Formação Acadêmica para a vaga.<br />");
            }

            if (sbErros.ToString() != string.Empty)
            {
                ((DefaultERPMaster)Master).ShowPopUp("Erro ao salvar Vaga", sbErros.ToString(), 4);
                return false;
            }
            return true;
        }

        protected void btSuspender_Click(object sender, EventArgs e)
        {
            if (txtSuspensao.Text == string.Empty)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                    "Erro ao suspender Vaga", 
                    "Informe o motivo da suspensão da vaga.", 4);
                return;
            }

            string motivoSuspensao = txtSuspensao.Text;
            int idVaga = Convert.ToInt32(Classes.Tools.PegarQueryString("ID"));
            BLL.Vagas vag = new BLL.Vagas();

            try
            {
                bool isSuspensa = vag.SuspenderVaga(idVaga, motivoSuspensao);
                if (isSuspensa)
                {
                    MontarTela();

                    ((DefaultERPMaster)Master).ShowPopUp(
                        "Vaga suspensa",
                        "O status da vaga foi alterado para suspensa.", 3);                    
                }
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                        "Erro",
                        string.Format("Erro ao suspender vaga. Detalhes: {0}", ex.Message), 4);                
            }
        }

        protected void btCancelar_Click(object sender, EventArgs e)
        {
            if (txtMotivoCancelamento.Text == string.Empty)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                    "Erro ao cancelar Vaga",
                    "Informe o motivo do cancelamento da vaga.", 4);
                return;
            }

            string motivoCancelamento = txtMotivoCancelamento.Text;
            int idVaga = Convert.ToInt32(Classes.Tools.PegarQueryString("ID"));
            BLL.Vagas vag = new BLL.Vagas();

            try
            {
                bool isCancelada = vag.CancelarVaga(idVaga, motivoCancelamento);
                if (isCancelada)
                {
                    MontarTela();

                    ((DefaultERPMaster)Master).ShowPopUp(
                        "Vaga cancelada",
                        "A vaga foi cancelada com sucesso.", 3);
                }
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                        "Erro",
                        string.Format("Erro ao cancelar vaga. Detalhes: {0}", ex.Message), 4);
            }
        }

        protected void btFinalizar_Click(object sender, EventArgs e)
        {           
            string feedback = txtFeedBack.Text;
            int idVaga = Convert.ToInt32(Classes.Tools.PegarQueryString("ID"));
            BLL.Vagas vag = new BLL.Vagas();

            try
            {
                bool isFinalizada = vag.FinalizarVaga(idVaga, feedback);
                if (isFinalizada)
                {
                    MontarTela();

                    ((DefaultERPMaster)Master).ShowPopUp(
                        "Vaga finalizada",
                        "A vaga foi finalizada com sucesso.", 3);
                }
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                        "Erro",
                        string.Format("Erro ao finalizar vaga. Detalhes: {0}", ex.Message), 4);
            }
        }

        protected void btSalvar_Click(object sender, EventArgs e)
        {
            bool isValid = Validacoes();
            if (!isValid)
                return;

            BLL.Vagas.entVaga vaga = new BLL.Vagas.entVaga();
            vaga.TituloVaga = txtTituloVaga.Text;
            vaga.NumeroVagas = Convert.ToInt32(txtNumeroVagas.Text);
            vaga.Cidade = txtCidade.Text;
            vaga.Estado = txtEstado.Text;
            vaga.Pais = txtPais.Text;
            vaga.Descricao = txtDescricao.Text;
            vaga.IdFormacao = Convert.ToInt32(ddlFormacao.SelectedValue);

            BLL.Vagas vag = new BLL.Vagas();

            if (Classes.Tools.PegarQueryString("ID") != null)
            {
                //É atualização de registro - update
                try
                {
                    vaga.IdVaga = Classes.Tools.PegarQueryString("ID");
                    vag.AtualizarDetalhesDaVaga(vaga);

                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Vaga atualizada",
                            "Os dados da vaga foram atualizados com sucesso.",
                            3);

                }
                catch (Exception ex)
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro",
                            String.Format("Houve um problema ao inserir os dados da vaga. Detalhes: {0}", ex.Message),
                            4);
                }
            }
            else
            { 
                //É inserção de novo registro - insert
                try
                {
                    vag.InserirDetalhesDaVaga(vaga);
                    if (vaga.IdVaga != null)
                    {
                        Response.Redirect(String.Format("006-Vagas-Detalhes.aspx?ID={0}&PM={1}",
                            Classes.Tools.Encript(vaga.IdVaga),
                            Classes.Tools.Encript("Insert")));
                    }                   
                }
                catch (Exception ex)
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro",
                            String.Format("Houve um problema ao salvar os dados da vaga. Detalhes: {0}", ex.Message),
                            4);
                }
            }
        }

        protected void btExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                BLL.Exclusao exc = new BLL.Exclusao();
                exc.ExcluirVaga(Classes.Tools.PegarQueryString("ID"));
                Response.Redirect(String.Format("005-Vagas.aspx?PM={0}", Classes.Tools.Encript("Delete")));
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                        "Erro",
                        String.Format("Houve um problema ao tentar excluir a vaga. Detalhes: {0}", ex.Message),
                        4);
            }
        }

        private void CarregaDetalhesDaVaga()
        {
            BLL.Vagas.entVaga vaga = new BLL.Vagas.entVaga();
            BLL.Vagas vag = new BLL.Vagas();

            try
            {
                string idVaga = Classes.Tools.PegarQueryString("ID").ToString();

                vaga = vag.CarregaDetalhesDaVaga(Convert.ToInt32(idVaga));
                if (vaga.IdVaga != null)
                {
                    txtCod.Text = vaga.IdVaga;
                    txtTituloVaga.Text = vaga.TituloVaga;
                    txtNumeroVagas.Text = vaga.NumeroVagas.ToString();
                    txtCidade.Text = vaga.Cidade;
                    txtEstado.Text = vaga.Estado;
                    txtPais.Text = vaga.Pais;
                    txtDtCadastro.Text = vaga.DtCadastro;
                    txtDescricao.Text = vaga.Descricao;
                    ddlFormacao.SelectedValue = vaga.IdFormacao.ToString();
                }
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro ao carregar dados",
                            string.Format("Não foi possível carregar os dados do vaga selecionada. Detalhes: {0}", ex.Message),
                            4);
            }
        }
    }
}